home *** CD-ROM | disk | FTP | other *** search
/ EnigmA Amiga Run 1995 November / EnigmA AMIGA RUN 02 (1995)(G.R. Edizioni)(IT)[!][issue 1995-11][Skylink CD].iso / earcd / gfx / jpegaga2.lha / jpegAGAsrc / ppm2aga / ppm2AGA.c < prev    next >
C/C++ Source or Header  |  1995-04-12  |  7KB  |  296 lines

  1. /* ppm2AGA main module                */
  2. /* written 1993-95 by Günther Röhrich */
  3. /* This is version 1.6a               */
  4.  
  5. #include <clib/exec_protos.h>
  6. #include <clib/intuition_protos.h>
  7. #include <clib/graphics_protos.h>
  8. #include <intuition/intuitionbase.h>
  9. #include <graphics/gfxbase.h>
  10. #include <libraries/iffparse.h>
  11. #include <iffp/ilbmapp.h>
  12. #include <dos/dos.h>
  13. #include <dos/dosextens.h>
  14. #include <stdio.h>
  15. #include <stdarg.h>
  16. #include <string.h>
  17.  
  18. #ifndef __GNUC__
  19. #include <pragmas/intuition_pragmas.h>
  20. #include <pragmas/graphics_pragmas.h>
  21. #include <pragmas/exec_pragmas.h>
  22. #endif
  23.  
  24. #include "ppm2AGA.h"
  25.  
  26. #ifdef __GNUC__
  27. #include <signal.h>
  28. #define MYSTRCMP strcasecmp
  29. #define MYSTRNCMP strncasecmp
  30. #else
  31. #define MYSTRCMP strcmp
  32. #define MYSTRNCMP strncmp
  33. #endif
  34.  
  35.  
  36. /* externals used by this module */
  37.  
  38. extern int ppm2ilbm(char *PPMfile, ULONG Mode, int NumPlanes, ULONG MaxMem); 
  39. #ifdef AZTEC_C
  40. extern int Enable_Abort; /* Needed to disable default CTRL-C handling */
  41. #endif
  42.  
  43. /* globals defined in this module */
  44.  
  45. char  *ver = "\0$VER: ppm2AGA 1.6a (12.4.95)";
  46. struct Library *IntuitionBase = NULL;
  47. struct Library *GfxBase = NULL;
  48. struct Library *IFFParseBase = NULL;
  49. int floyd=0; /* indicates if FS-dithering should be used */
  50. char *ILBMfile;
  51. char *BaseName=NULL;
  52. int ExactColor=0; /* indicates if shifting colors is allowed */
  53. int GfxEnable=0;  /* indicate if Gfx is enabled */
  54. int VGAenable=0;  /* indicate VGA-mode */
  55. int jpegAGA=0;    /* indicate that map-file should be created */
  56. ULONG SMR=0;      /* indicate that user has chosen a screenmode */
  57. ULONG SMR_DisplayID;  /* this variable contains later the DisplayID */
  58. ULONG SMR_NumPlanes;
  59. ULONG SMR_HAM; 
  60. struct Process *MyProcess=NULL;
  61.  
  62. void PLError(char *ErrorString); /* prints the message, cleans up and quits */
  63. void PLExit(int returnvalue); /* cleans up and quits */
  64. void pm_message(char* format, ... );
  65. int AbortCheck(void);
  66. void PLProgress(ULONG Value, ULONG MaxValue);
  67.  
  68.  
  69. #ifdef __GNUC__
  70. int GCCabort=0;
  71. /* this is called when CTRL-C occurs */
  72. void GCCAbortHandler(void)
  73. {
  74.   GCCabort=1;
  75. }
  76. #endif
  77.  
  78. void PLUsage(void)
  79. {
  80.  PLError("Usage: ppm2AGA infile outfile [switches]\n"
  81.          "switches: -HAM8     use HAM8-conversion (default)\n"
  82.          "          -HAM6     use HAM6-conversion\n"
  83.          "          -CMAPn    use COLORMAP conversion with n bitplanes\n"
  84.          "          -E        use exact colors (only COLORMAP mode)\n"
  85.          "          -FS       enable Floyd-Steinberg dithering\n"
  86.          "          -Mx       load pictures up to size x into memory\n"
  87.          "          -2        enable 2-pass processing for HAM mode\n" 
  88.          "          -D        display picture during processing\n"
  89.          "          -VGA      use VGA screenmode\n"
  90.          "          -SMR      use screen mode requester\n"
  91.          "          -jpegAGA  create colormap file for jpegAGA/PhotoCDAGA\n"
  92.          "          -b name   base name for PhotoCDAGA map files\n");
  93. }
  94.  
  95.  
  96. main(int argc, char *argv[])
  97. {
  98.  int Error;
  99.  int i;
  100.  ULONG Mode=HAM8;
  101.  int NumPlanes = 63;
  102.  int Pass = 1; /* 2-pass disabled by default */
  103.  ULONG MaxMem = 1000000;
  104.  
  105.  #ifdef AZTEC_C             /* Disable Aztec C CTRL-C handling */
  106.  Enable_Abort = 0;
  107.  #endif
  108.  #ifdef __GNUC__            /* Modify GNU C CTRL-C handling */
  109.  signal(SIGINT, GCCAbortHandler);
  110.  #endif
  111.  
  112.  puts("ppm2AGA V1.6a written by Günther Röhrich.");
  113.  
  114.  /* remove the comments for beta versions */
  115.  /*  puts("Preliminary version. DO NOT SPREAD IT!");  */
  116.  
  117.  
  118.  /* Open all the libraries we need */
  119.  
  120.  if(!(IntuitionBase = OpenLibrary((UBYTE *)"intuition.library", 33)))
  121.    PLError("Can't open intuition.library V33 or higher.\n");
  122.  
  123.  if(!(GfxBase = OpenLibrary((UBYTE *)"graphics.library",33)))
  124.    PLError("Can't open graphics.library V33 or higher.\n");
  125.  
  126.  /* iffparse.library V37 works also with Kickstart 1.2/1.3 */
  127.  
  128.  if(!(IFFParseBase = OpenLibrary((UBYTE *)"iffparse.library",36)))
  129.    PLError("Can't open iffparse.library V36 or higher.\n");
  130.  
  131.  /* disable system requesters for our process*/
  132.  
  133.  MyProcess = (struct Process *)FindTask(NULL);
  134.  if(MyProcess) MyProcess->pr_WindowPtr = (APTR)(-1);
  135.  
  136.  if(argc < 3) PLUsage();
  137.  
  138.  for(i=3; i<argc; i++)
  139.  {
  140.    #ifndef __GNUC__
  141.    strupr(argv[i]);
  142.    #endif
  143.    if(!MYSTRNCMP(argv[i], "-HAM8", 5))
  144.    {
  145.      Mode = HAM8;
  146.      NumPlanes = 63;
  147.    }
  148.    else if(!MYSTRNCMP(argv[i], "-HAM6", 5))
  149.    {
  150.      Mode = HAM6;
  151.      NumPlanes = 15;
  152.    }
  153.    else if(!MYSTRNCMP(argv[i], "-CMAP", 5))
  154.    {
  155.      Mode = COLORMAP;
  156.      NumPlanes = (int)strtoul(&argv[i][5], NULL, 0);
  157.      if(NumPlanes < 1 || NumPlanes > 8)
  158.      PLError("Only 1 to 8 planes allowed.\n");
  159.    }
  160.    else if(!MYSTRNCMP(argv[i], "-M", 2))
  161.    {
  162.      MaxMem = strtoul(&argv[i][2], NULL, 0);
  163.    }
  164.    else if(!MYSTRNCMP(argv[i], "-FS", 3))
  165.    {
  166.      floyd = 1;
  167.    }
  168.    else if(!MYSTRNCMP(argv[i], "-E", 2))
  169.    {
  170.      ExactColor = 1;
  171.    }
  172.    else if(!MYSTRNCMP(argv[i], "-D", 2))
  173.    {
  174.      GfxEnable = 1;
  175.    }
  176.    else if(!MYSTRNCMP(argv[i], "-2", 2))
  177.    {
  178.      Pass = 0;
  179.    }
  180.    else if(!MYSTRNCMP(argv[i], "-VGA", 4))
  181.    {
  182.      VGAenable = 1;
  183.    }
  184.  
  185.    else if(!MYSTRNCMP(argv[i], "-SMR", 4))
  186.    {
  187.      SMR = 1;
  188.    }
  189.  
  190.    else if(!MYSTRNCMP(argv[i], "-JPEGAGA", 8))
  191.    {
  192.      jpegAGA = 1;
  193.    }
  194.  
  195.    else if(!MYSTRNCMP(argv[i], "-b", 2))
  196.    {
  197.      if(argc == i+1) PLUsage(); /* last argument */
  198.      BaseName = argv[i+1];
  199.      i++;
  200.    }
  201.    else PLUsage();
  202.    if( (jpegAGA == 1) && (Pass == 0 || Mode != HAM8)) PLUsage(); 
  203.  }    
  204.  
  205.  
  206.  if(SMR)
  207.  {
  208.    if(ChooseScreenMode()) PLError("No screen mode selected.\n");
  209.    if(SMR_HAM)
  210.    {
  211.      if(SMR_NumPlanes == 8)
  212.      {
  213.        Mode = HAM8;
  214.        NumPlanes = 63;
  215.      }
  216.      else
  217.      {
  218.        Mode = HAM6;
  219.        NumPlanes = 15;
  220.      }
  221.    }
  222.    else
  223.    {
  224.      Mode = COLORMAP;
  225.      NumPlanes = SMR_NumPlanes;
  226.    } 
  227.  }
  228.  
  229.  ILBMfile = argv[2];
  230.  if(Mode == HAM8 || Mode == HAM6) NumPlanes = NumPlanes + Pass;
  231.  
  232.  Error = ppm2ilbm(argv[1], Mode, NumPlanes, MaxMem);
  233.  
  234.  /* if(Error) pm_message("Error, no picture created.\n"); */
  235.  
  236.  PLExit(Error);  
  237. }
  238.  
  239. void PLError(char *ErrorString)
  240. {
  241.  pm_message(ErrorString);
  242.  PLExit(10);
  243. }
  244.  
  245.  
  246.  
  247.  
  248. /* NOTE: if you want to implement a GUI you only have to */
  249. /* change the functions below, not the complete program  */
  250.  
  251.  
  252. /* this is called on exit */
  253.  
  254. void PLExit(int returnvalue)
  255. {
  256.  if(IntuitionBase) CloseLibrary(IntuitionBase);
  257.  if(GfxBase)       CloseLibrary(GfxBase);
  258.  if(IFFParseBase)  CloseLibrary(IFFParseBase);
  259.  if(MyProcess)     MyProcess->pr_WindowPtr = (APTR)0;
  260.  exit(returnvalue);
  261. }
  262.  
  263.  
  264. /* this is called to see if we must abort */
  265.  
  266. int AbortCheck(void)
  267. {
  268.  #ifndef __GNUC__
  269.  return SetSignal(0L,0L)&SIGBREAKF_CTRL_C;
  270.  #else
  271.  return GCCabort;
  272.  #endif 
  273. }
  274.  
  275.  
  276. /* this is called for progress reports */
  277. /* not called in this version */
  278.  
  279. void PLProgress(ULONG Value, ULONG MaxValue)
  280. {
  281.  /* we do nothing special right now */
  282.  printf("\015Progress: %5.2f%%", Value * 100.0 / (MaxValue + 1));
  283. }
  284.  
  285.  
  286. /* this is called when a message must be printed */
  287.  
  288. void pm_message(char* format, ... )
  289. {
  290.   va_list args;
  291.  
  292.   va_start( args, format );
  293.   vprintf(format, args );
  294.   va_end( args );
  295. }
  296.